#region LGPL License
//
//Adriano Ribeiro <adribeiro@gmail.com>
//
//Copyright (c) 2007 Mono Overlay Routing Foundation Team
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
// 
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Lesser General Public License for more details.
// 
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA


#endregion


using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;

using Monorf.Serialization;


namespace Monorf.Net
{
        public class UdpSender
        {
                UdpClient udpTransport;
                IPEndPoint remoteEndPoint;
                Byte[] messageBuffer;
                AsyncCallback sendComplete;
                Queue<Message> sendChannelMessages;
                
                public UdpSender(Int32 messageSize, Int64 bufferSize)
                {
                        this.udpTransport = new UdpClient();
                        messageBuffer = new Byte[messageSize];
                        sendComplete = new AsyncCallback(SendComplete);
//                        this.sendChannelMessages = sendChannelMessages;
                }
                
                /// <summary>
                /// dispatch asynchronous send data
                /// </summary>
                /// <param name="message"></param>
                /// <param name="remoteEndPoint"></param>
                public void Send(Message message, IPEndPoint remoteEndPoint)
                {
                        messageBuffer = Serializer.ToXML<Message>(message);
                        
                        this.udpTransport.BeginSend(messageBuffer, messageBuffer.Length, sendComplete,null);
                }
                
                /// <summary>
                /// send complete data
                /// </summary>
                /// <param name="result"></param>
                private void SendComplete(IAsyncResult result)
                {
                        this.udpTransport.EndSend(result);
                }
        }
}
